package cn.xiaolang.function.packageVSbasic;

/**
 * 
 * 包装类型和基本数据类型的比较（jdk1.5提供的特性）
 * @version 1.0
 * @since JDK1.7
 * @author fuhw
 * @date 2016年4月1日 下午2:25:28
 */
public class PackageTypeVSBasicDataType {

	
	public static void main(String[] args) {
		
		/**
		 * 基本数据类型：直接存储在堆内存中，直接存储的数据值，是按值传递
		 * 包装类型：创建的是对象拥有方法和字段，存储在栈中，是按址传递
		 * 
		 * 自动装箱：Integer integer1 = Integer.ValueOf(100);
		 * 什么时候自动装箱呢？：在基本数据类型装换为包装类型的时候，自动装箱
		 */
		Integer integer1 = 100;
		/**
		 * 自动拆箱：int i = integer1.intValue();
		 * 什么时候自动拆箱呢？：对象中的数据从对象中自动取出的时候；或在进行运算的时候都可以进行拆箱
		 */
		int i = integer1;
		
		
		Integer integer2 = 100;
		
		Integer integer3 = 200;
		Integer integer4 = 200;
		
		Integer integer5 = new Integer(100);
		Integer integer6 = new Integer(100);
		/**
		 * Integer.ValueOf();自动装箱的大小-128-127之间
		 * 超过这个范围的就是一个新的对象：new Integer();
		 */
		System.out.println("integer1 == integer2 ?"+(integer1 == integer2));
		System.out.println("integer3 == integer4 ?"+(integer3 == integer4));
		/**
		 * 不同的对象，值相同，地址不同，==比较的是值和地址
		 */
		System.out.println("integer5 == integer6 ?"+(integer5 == integer6));
	}
}
